Syntax20b.Scn.Fnt ParcElems Alloc Syntax24b.Scn.Fnt Syntax10.Scn.Fnt Syntax10b.Scn.Fnt FoldElems (* AMIGA *) MODULE AmigaMath; (* RD 6.8.1995, updated OJ 30 Apr 96 *) IMPORT SYSTEM, E:=AmigaExec; mathSBBase-, mathSTBase- : E.LibraryPtr; mathSBVersion-, mathSTVersion- : INTEGER; termEntry : E.TermEntry; CONST mathSBName*="mathieeesingbas.library"; mathSTName*="mathieeesingtrans.library"; PROCEDURE -ReturnD0 04EH,05EH, 04EH,075H; PROCEDURE Entier*(s: REAL): LONGINT; BEGIN SYSTEM.PUTREG( 0, s ); SYSTEM.CALL( -90, mathSBBase ); SYSTEM.CALL( -30, mathSBBase ); ReturnD0 END Entier; PROCEDURE IntToReal*(l: LONGINT; VAR d: REAL); BEGIN SYSTEM.PUTREG( 0, l ); SYSTEM.CALL( -36, mathSBBase ); SYSTEM.GETREG( 0, d ) END IntToReal; PROCEDURE Cmp*(s1, s2: REAL): LONGINT; (* 1 if s1>s2 0 if s1=s2 -1 if s10 0 if s=0 -1 if s<0 *) BEGIN SYSTEM.PUTREG( 0, s ); SYSTEM.CALL( -48, mathSBBase ); ReturnD0 END Tst; PROCEDURE Abs*(s: REAL; VAR d: REAL); BEGIN SYSTEM.PUTREG( 0, s ); SYSTEM.CALL( -54, mathSBBase ); SYSTEM.GETREG( 0, d ) END Abs; PROCEDURE Neg*(s: REAL; VAR d: REAL); BEGIN SYSTEM.PUTREG( 0, s ); SYSTEM.CALL( -60, mathSBBase ); SYSTEM.GETREG( 0, d ) END Neg; PROCEDURE Add*(s1, s2: REAL; VAR d: REAL); BEGIN SYSTEM.PUTREG( 0, s1 ); SYSTEM.PUTREG( 1, s2 ); SYSTEM.CALL( -66, mathSBBase ); SYSTEM.GETREG( 0, d ) END Add; PROCEDURE Sub*(s1, s2: REAL; VAR d: REAL); BEGIN SYSTEM.PUTREG( 0, s1 ); SYSTEM.PUTREG( 1, s2 ); SYSTEM.CALL( -72, mathSBBase ); SYSTEM.GETREG( 0, d ) END Sub; PROCEDURE Mul*(s1, s2: REAL; VAR d: REAL); BEGIN SYSTEM.PUTREG( 0, s1 ); SYSTEM.PUTREG( 1, s2 ); SYSTEM.CALL( -78, mathSBBase ); SYSTEM.GETREG( 0, d ) END Mul; PROCEDURE Div*(s1, s2: REAL; VAR d: REAL); BEGIN SYSTEM.PUTREG( 0, s1 ); SYSTEM.PUTREG( 1, s2 ); SYSTEM.CALL( -84, mathSBBase ); SYSTEM.GETREG( 0, d ) END Div; (*---------------------------------------------------*) PROCEDURE Arctan*(s: REAL; VAR d: REAL); BEGIN SYSTEM.PUTREG( 0, s ); SYSTEM.CALL( -30, mathSTBase ); SYSTEM.GETREG( 0, d ) END Arctan; PROCEDURE Cos*(s: REAL; VAR d: REAL); BEGIN SYSTEM.PUTREG( 0, s ); SYSTEM.CALL( -42, mathSTBase ); SYSTEM.GETREG( 0, d ) END Cos; PROCEDURE Sin*(s: REAL; VAR d: REAL); BEGIN SYSTEM.PUTREG( 0, s ); SYSTEM.CALL( -36, mathSTBase ); SYSTEM.GETREG( 0, d ) END Sin; PROCEDURE Ln*(s: REAL; VAR d: REAL); BEGIN SYSTEM.PUTREG( 0, s ); SYSTEM.CALL( -84, mathSTBase ); SYSTEM.GETREG( 0, d ) END Ln; PROCEDURE Exp*(s: REAL; VAR d: REAL); BEGIN SYSTEM.PUTREG( 0, s ); SYSTEM.CALL( -78, mathSTBase ); SYSTEM.GETREG( 0, d ) END Exp; PROCEDURE Sqrt*(s: REAL; VAR d: REAL); BEGIN SYSTEM.PUTREG( 0, s ); SYSTEM.CALL( -96, mathSTBase ); SYSTEM.GETREG( 0, d ) END Sqrt; PROCEDURE Ratio*(s1, s2: LONGINT; VAR d: REAL); (* returns s1/s2 *) VAR r1,r2: REAL; BEGIN IntToReal(s1, r1); IntToReal(s2,r2); Div(r1,r2,d) END Ratio; PROCEDURE e*(VAR d: REAL); BEGIN d:=SYSTEM.VAL(REAL, 0402DF854H) END e; PROCEDURE pi*(VAR d: REAL); BEGIN d:=SYSTEM.VAL(REAL, 040490FDBH) END pi; PROCEDURE Init; TYPE LibraryPtr=POINTER TO E.Library; VAR lib:LibraryPtr; BEGIN mathSBBase:=E.OpenLibrary(mathSBName,37); IF mathSBBase=0 THEN HALT(99) END; lib:=SYSTEM.VAL(LibraryPtr,mathSBBase); mathSBVersion:=lib.version; mathSTBase:=E.OpenLibrary(mathSTName,37); IF mathSTBase=0 THEN HALT(99) END; lib:=SYSTEM.VAL(LibraryPtr,mathSTBase); mathSTVersion:=lib.version END Init; PROCEDURE Term; BEGIN E.CloseLibrary( mathSTBase ); E.CloseLibrary( mathSBBase ) END Term; BEGIN Init; E.Register(termEntry, Term); END AmigaMath.